import { http, toast } from 'uview-plus'
import { useStore } from '@/store' // 假设 Pinia store 定义在 @/store 目录
const errStatusCode = new Map([
    [200, "OK"], // 通常表示请求已成功被服务器接收、理解、并接受
    [201, "已创建"], // 请求成功并且服务器创建了新的资源
    [204, "无内容"], // 服务器成功处理了请求，但没有返回任何内容
    [400, "错误请求"], // 请求有误，服务器无法理解
    [401, "未授权"], // 请求要求身份验证。对于需要登录的网页，服务器可能返回此响应
    [403, "禁止访问"], // 服务器理解请求但拒绝执行它
    [404, "页面未找到"], // 服务器无法根据客户端的请求找到资源（网页）。通过此代码，服务器可指明请求的资源不复存在或未曾存在
    [408, "请求超时"], // 客户端没有在服务器预备等待的时间内完成一个请求
    [410, "已删除"], // 请求的资源已永久删除，且不会再得到的
    [418, "我是一个茶壶"], // 超文本咖啡壶控制协议（IETF的愚人节玩笑）中定义的，1998年制定，已被废弃。状态码418表示“I'm a teapot”，即“我是一个茶壶”
    [500, "服务器错误"], // 服务器内部错误，无法完成请求
    [501, "未实现"], // 服务器不支持请求的功能，无法完成请求
    [502, "错误网关"], // 作为网关或代理工作的服务器从上游服务器收到无效响应
    [503, "服务不可用"], // 服务器目前无法使用（由于超载或停机维护）。通常，这只是暂时状态
    [504, "网关超时"], // 作为网关或代理工作的服务器未及时从上游服务器收到请求
    // ... 可以根据需要添加更多状态码和消息
]);
const requestInterceptors = (app) => {
    http.interceptors.request.use((config) => {
        config.data = config.data || {}
        const store = useStore(app) // 获取 Pinia store 实例
        const token = store.token // 假设 store 中有 token 属性
        if (token) {
            config.header = config.header || {}
            config.header['Authorization'] = `Bearer ${token}`
        }
        return config
    }, (config) => Promise.reject(config))
}

const responseInterceptors = (app) => {
    http.interceptors.response.use((response) => {
        const data = response.data

        if (response.statusCode !== 200) {
            uni.showToast({
                title: errStatusCode.get(response.statusCode) || '请求失败',
                icon: 'none'
            })
            return Promise.reject(data)
        }
        return data

    }, (response) => Promise.reject(response))
}

export {
    requestInterceptors,
    responseInterceptors
}